package com.wk.exercise.leetcode;

import com.wk.SuppressConstant;

/**
 * <pre>
 *      @author : wk <br/>
 *      e-mail : 1226426603@qq.com <br/>
 *      time   : 2020/3/16 <br/>
 *      desc   :    面试题 01.06. 字符串压缩      <br/>

字符串压缩。利用字符重复出现的次数，编写一种方法，实现基本的字符串压缩功能。比如，字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文字母（a至z）。

示例1:

输入："aabcccccaaa"
输出："a2b1c5a3"
示例2:

输入："abbccd"
输出："abbccd"
解释："abbccd"压缩后为"a1b2c2d1"，比原字符串长度更长。
提示：

字符串长度在[0, 50000]范围内。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/compress-string-lcci
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。


 *      address: https://leetcode-cn.com/problems/compress-string-lcci/
 *      GitHub : https://github.com/wk1995 <br/>
 *      CSDN   : http://blog.csdn.net/qq_33882671 <br/>
 * </pre>
 */
@SuppressWarnings(SuppressConstant.UNUSED)
public class Q20031601 implements Q {
    @Override
    public void answer() {
        String s="abbccd";
        System.out.println(compressString(s));
    }
    private String compressString(String s) {
        if(s==null || s.isEmpty()){
            return s;
        }
        StringBuilder sb=new StringBuilder();
        int sum=1;
        char target=s.charAt(0);
        for(int i=1;i<s.length();i++){
            if(target==s.charAt(i)){
                sum++;
            }else{
                sb.append(target).append(sum);
                sum=1;
                target=s.charAt(i);
            }
        }
        sb.append(target).append(sum);
        if(sb.length()>=s.length()){
            return s;
        }
        return sb.toString();
    }
}
